package com.second.app.thread.线程基础.day03;

/**
 * @Author GYZ
 * @Date 2023/11/20
 * <pre>
 *   HasSelfPrivate1Num：
 *       num变量是放在addI()方法外部的，所以会存在线程安全的问题
 *    所以解决办法：
 *        在addI方法上加上synchronized关键字,两个线程访问同一个对象中的同步方法时一定是线程安全的。
 *        同步访问，所以先打印a，然后打印出b
 * </pre>
 */
public class HasSelfPrivate1Num {
    private int num=0;
//    public void addI(String userName) {
//        try {
//            if (userName.equals("a")) {
//                num=100;
//                System.out.println("a set over");
//                Thread.sleep(2000);
//            } else {
//                num = 200;
//                System.out.println("b set over");
//            }
//            System.out.println(userName + " num=" + num);
//        } catch (InterruptedException e) {
//            e.printStackTrace();
//        }
//    }
    public synchronized void addI(String userName) {
        try {
            if (userName.equals("a")) {
                num=100;
                System.out.println("a set over");
                Thread.sleep(2000);
            } else {
                num = 200;
                System.out.println("b set over");
            }
            System.out.println(userName + " num=" + num);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}
